package commande;

/**
 *Represente la classe abstraite pour la reconnaissance de commande.
 *@suivant suivant cor suivant dans la chaine de reconnaissance
 *@client reference au client 
 */

public abstract class ClasseAnalysateurTexte implements IAnalysateurTexte {
	
	
	private ClasseAnalysateurTexte suivant;
	
	
	
	public ClasseAnalysateurTexte(ClasseAnalysateurTexte suivant) {
		
		this.suivant = suivant;
	}
	
	/**
	 *Propose � tour de role au diff�rents cor la commande � reconnaitre.
	 *Si un cor reconnait la commande alors on s'arr�te
	 *Sinon on passe au cor suivant
	 *Si on a fait le tour de tous les cor et qu'on a pas reconnu la commande alors on l�ve une 
	 *Exception de type SaisieErroneeException, pour envoyer un msg d'erreur sur 
	 *La console du client 
	 *@chaine la commande � reconnaitre 

	 */		
	public void ChaineAnalyseTexte(String chaine) throws SaisieErroneeException
	{ 
		
		boolean s = this.analyseTexte(chaine);       

		if  (s == true) 			
		return;

		else            			

		if  (this.suivant != null)  	
			
		this.suivant.ChaineAnalyseTexte(chaine);  
		else {  
			
			throw new SaisieErroneeException();
		} 

	}
	
	/**
	 *D�termine si la commande � �t� reconnue ou non.
	 *Elle envoie true si la commande est reconnue, false sinon
	 *@chaine la commande � reconnaitre 
	 */	
	
	protected abstract boolean analyseTexte(String chaine);

}
